﻿using System;
using System.Collections.Generic;
using System.Data;
using App_Code.Conexao;
using App_Code.Interface;
using App_Code.Vo;
using FluorineFx;
namespace App_Code.Retaguarda.BD
{
    [RemotingService]
    public class AtendimentoBD: BdAbstrato<Atendimento>
    {
        public AtendimentoBD(ConfiguradorConexao configurador)
            : base(configurador)
        {
        }

        public override void Adicionar(Atendimento atendimento)
        {
            ComandoSql("[dbo].[ins_TBL_Atendimento]", CommandType.StoredProcedure);
            MontarParametros(atendimento);
            ExecutarComando();
        }

        public override void Atualizar(Atendimento atendimento)
        {
            ComandoSql("[dbo].[atu_TBL_Endereco]", CommandType.StoredProcedure);
            MontarParametros(atendimento);
            ExecutarComando();
        }

        public override void Excluir(Atendimento atendimento)
        {
            throw new NotImplementedException();
        }

        public override Atendimento Consultar(Atendimento atendimento)
        {
            ComandoSql("[dbo].[cons_TBL_EnderecoPorCodigoUsuario]", CommandType.StoredProcedure);
            AdicionarParametroNulo("@CODIGO_USUARIO", atendimento.Usuario.Codigo);
            return MontarObjeto();
        }

        public override List<Atendimento> Listar(Atendimento atendimento)
        {
            ComandoSql("[dbo].[cons_TBL_AreaAtuacaoPorModalidade]", CommandType.StoredProcedure);
            AdicionarParametro("@CODIGO_USUARIO", atendimento.Usuario.Codigo);
            return MontarListagem();
        }

        protected override void PreencherObjeto(ref Atendimento atendimento, IDataReader reader)
        {
            #region Endereço Usuário

            if (reader["CODIGO"] != DBNull.Value)
            {
                atendimento.Codigo = (decimal)reader["CODIGO"];

                if (reader["UNIDADE_SAUDE"] != DBNull.Value)
                {
                    var unidade = new UnidadeSaude();
                    unidade.Codigo = (decimal)reader["UNIDADE_SAUDE"];
                    atendimento.UnidadeSaude = unidade;
                }
                if (reader["MEDICO"] != DBNull.Value)
                {
                    var medico = new Medico();
                    medico.Codigo = (decimal)reader["MEDICO"];
                    atendimento.Medico = medico;
                }
                if (reader["DATA_ATENDIMENTO"] != DBNull.Value)
                {
                    atendimento.DataConsulta = (DateTime)reader["DATA_ATENDIMENTO"];
                }

                if (reader["OBSERVACAO"] != DBNull.Value)
                {
                    atendimento.Observacao = reader["OBSERVACAO"].ToString();
                }

                if (reader["CODIGO_USUARIO"] != DBNull.Value)
                {
                    var usuario = new Usuario();
                    usuario.Codigo = (decimal)reader["CODIGO_USUARIO"];
                    atendimento.Usuario = usuario;
                }
                
            }
            #endregion
        }

        private void MontarParametros(Atendimento atendimento)
        {
            if (atendimento.Codigo > 0)
            {
                AdicionarParametro("@codigo", atendimento.Codigo); 
            }

            AdicionarParametro("@unidadesaude_codigo", atendimento.UnidadeSaude.Codigo);
            AdicionarParametro("@medico_codigo", atendimento.Medico.Codigo);
            AdicionarParametro("@dataatendimento", atendimento.DataConsulta);
            AdicionarParametro("@observacao", atendimento.Observacao);
            AdicionarParametro("@codigo_usuario", atendimento.Usuario.Codigo);

        }
    }
}
